总体介绍
注意力机制(Attention Mechanism)最早应用 CV 任务上 ,但最初的论文引用,作者没有找到,如有知晓的,还望在评论中给出。在 NLP 中的最早应用,应该是文献 [1] ,机器翻译中对齐与翻译联合学习。
直观地说,注意力机制是衡量重要性权重的向量,或元素之间相关性的表示。
先引入 seq2seq 框架,由编码器和解码器组成,广泛用于机器翻译、自动文摘等任务。
由编码器对原始输入进行编码,压缩为固定长度的上下文向量; 编码器最后的一个隐藏层状态送入解码器,进行解码输出。 可以解决变长的输入与输出,用于不同语言、不同长短的输入与输出。常用的网络结构为 RNN,具体为 LSTM 或 GRU。
但是上述任务面临一个问题,仅靠编码层最后一个隐层状态能否包含整个输入的信息,特别当翻译的语句特别长时,这种问题更加显著。
文献 [1] 提出将编码层所有隐层状态经过线性加权后,送入解码层,进行每一步的输出,如下图所示。这样能够保证在解码不同词时,每个词的编码贡献是不同的,也能反映出源语言与目标语言中哪些词是较为相关的。
▲ 文献1中编解码图
表示第 t 时刻解码时注意力分布,这是本篇论文的关键 。 总体是为了计算条件概率分布:
表示解码输出第 t 个词时,与第 i 个输入序列词之间的相关因子。 这里就是一个 softmax 函数,归一化所有的注意力权重。
至此,公式就介绍结束。这里需要注意的一点是,计算 的函数又被统称为配分函数,即 score 函数。 后面会介绍多种配分函数的计算方式。 论文还通过对齐分数矩阵可视化所提模型的翻译对齐效果,通过颜色的深浅反应两者之间的联系紧密,这也成为后面应用注意力机制解决其他问题的常用实验结果分析方法。
注意力统一化描述
将 Attention 从 seq2seq 框架中抽取出来,可以描述为下图所示:
▲ 来自张俊林blog分享 [2]
source 中包含键值对 (相当于文献 [1] 中的编码层隐层状态),计算 Target 中query(前一时刻的解码层隐层状态)与 key 的相关性,得到 key 对应 value 的权重( ),最后对 value 加权求和得到 attention value。 其计算过程可以分为三个阶段,如下图所示:
计算 query 和 key 之间的相似性或相关性;
▲ 来自张俊林blog分享 [2]
其中,计算相似度或相关性函数是上节提到的 score 函数,在文献 [3] 中给出了其他几种常用的配分函数计算形式: ▲ 来自文献 [3]
这里的 等价于上节的 , 第一项为点积运算,在计算相似度上还有常用的 cosine 计算(文献 [4] );第二项常用于输入输出维度不对等,使用中间矩阵相乘将其对齐;第三项为二者进行拼接后,使用 tanh 函数进行激活。 此外,还有 Transfomer 中使用到的缩放点积注意力, (文献 [5] ),是点积计算的延伸,增加了一个缩放因子。
注意力机制发展至今,研究者从各个方面对其进行了改进,也就产生了注意力的各种形式,下面将分类对其进行介绍。
Soft attention v.s. Hard attention Global attention v.s. Local attention Soft Attention VS Hard Attention
这种分类方式由文献 [8] 提出,该研究任务是由图片生成文字描述(Image Caption),文中使用注意力捕获文字与图中特定区域的联系。
Soft Attention
NLP 中尝试用的注意力方式,取值为 [0, 1] 的权重概率分布,使用了所有编码层的隐层状态,与上两节的介绍相同,可以直接在模型训练过程中,通过后向传播优化对参数进行优化。
Hard Attention
Hard attention 在原文中被称为随机硬注意力(Stochastic hard attention) ,这里的随机是指对编码层隐状体的采样过程,Hard attention 没有使用到所有的隐层状态,而是使用 one-hot 的形式对某个区域提取信息,使用这种方式无法直接进行后向传播(梯度计算),需要蒙特卡洛采样的方法来估计梯度。
Global Attention VS Local Attention
由文献 [3] 提出,文中小节首句介绍,先打消了字面的意思,不是按照原序列的所有位置和局部位置做 attention 来划分。 These classes differ in terms of whether the “attention”is placed on all source positions or on only a few source positions. 这两者的区别在于 source-side 的上下文向量 的计算 ,关于 的介绍具体看第一小节。Global Attention
以下简称 Global attention 为 GA, GA 在推导 c_t 时考虑了所有的编码层隐层状态,模型图如下图所示,其中蓝色表示编码码层,红色表示解码层。
可以看到 global attention 是在计算 c_t 时考虑了当前的目标解码隐层状态和所有编码隐层状态,这里的 a_t 为全局对齐权重。若不指定说明,一般 attention 都是指 global attention。
Local Attention
Global Attention 存在以下两个缺点:
每次解码目标词,都要计算所有的编码隐层向量,在翻译或处理长文本序列时计算代价高。
文本序列过长,也有可能导致注意力不集中、过度分散(这个不是论文中介绍,只是借鉴他人介绍,可不做参考)。 Local attention 相对于 global attention 直观的感受,专注于小窗口的上下文,也就是不考虑所有的编码隐层状态,模型结构图如下所示。为实现该想法,要在每一时刻解码时构造一个位置变量 ,记录当前解码位置,该窗口就可以表示为 ,其中 D 为窗口大小,为实验选值。 不同于 global attention 中对齐向量是变长的,Local attention 中 是定长的,文中给出了两种方法定义该对齐向量: local-p 预测的,利用 预测 ,计算公式为:,其中 S 为原句长度, 为待学习的模型参数。此外,为了使对齐点更接近 ,引入了高斯分布计算对齐权重 ,公式这里就不给出了,感兴趣的可以看论文公式 10。
Self-attention 又称为 intra attention,顾名思义,其不是计算 source-target 之间的注意力分布,而是单一计算 source 或 target 内部的注意力分布,也可以看作特殊的 source=target 的情况。其可视化的示例如下图所示,文本序列内部不同词之间的联系。
具体来讲,self attention 具有以下优点: 相比 RNN 依次序列计算,在长距离依赖特征上表现更好;可并行化计算。 在文献 [5] 中给出了不同层模型(self-attention\RNN\CNN)在层复杂度、序列操作、最大路径长度的对比,结果如下图所示。
▲ 文献5
注意力并行化的代表,缩放点积注意力在前面小节中已经提过,多头注意力不仅计算一次注意力,而是并行化计算多次注意力,这样模型可以同时关注多个子空间的信息。计算公式为: Hierarchical attention (层次注意力)由文献 [9] 提出,由词级别、句子级别注意力机制组成,在文档级别的任务上,往往由多篇章、多句子、多词语组成,Hierarchical attention 能够更好捕获 global 和 local 的信息。
由文献 [10] 提出,论文研究任务为阅读理解,AOA 从结构图(下图)上来看时 attention 之后再 attention,与 hierarchical attention 有些相似,但是其具体计算却不同。首先对文档与当前 query 进行点积注意力,然后从行、列分别对齐进行归一化,得到两个注意力权重分布,再次求一次点积注意力。
memory-based attention
memory 中存储了 的键值对,当 key 和 value 相同时,就是最基本的 attention 形式。以 Q&A 任务 [11] 为例能够更好地说明计算,memory 存储了 question(key)---->>answer(value),现新来一个 question,要依据 memory 中的问题-答案对得到答案。起计算方式为:
计算新来的 question 与历史 question 的相似度,即 网上有一个例子,比较能够说明问题,不过没找到最初的来源,如下图所示:
Attention 的“花样”真的很多,每次看都有很多新的玩法,不过基本也不脱离最本质的 QKV 结构,期待着有更多研究。 [1] Neural Machine Translation by Jointly Learning to Align and Translate. https://arxiv.org/abs/1409.0473 [2] https://blog.csdn.net/malefactor/article/details/78767781 [3] Effective approaches to attention-based neural machine translation. https://arxiv.org/abs/1508.04025 [4] Neural Turing Machines. https://arxiv.org/abs/1410.5401 [5] Attention Is All You Need. https://arxiv.org/abs/1706.03762 [6] https://cloud.tencent.com/developer/article/1420941 [7] https://www.jianshu.com/p/270832a34e7f [8] Show, Attend and Tell: Neural Image Caption Generation with Visual Attention. https://arxiv.org/abs/1502.03044 [9] Hierarchical attention networks for document classification. https://www.aclweb.org/anthology/N16-1174 [10] Attention-over-Attention Neural Networks for Reading Comprehension. https://arxiv.org/abs/1607.04423 [11] End-To-End Memory Networks. https://arxiv.org/abs/1503.08895
#投 稿 通 道 #
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读 ,也可以是学习心得 或技术干货 。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品 ,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱: hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」 也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」 订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」 ,小助手将把你带入 PaperWeekly 的交流群里。